package com.whmskj.xjlhsc.panel.service.imp;

import com.whmskj.xjlhsc.panel.mapper.FrontSpinningMapper;
import com.whmskj.xjlhsc.panel.pojo.vo.CardingMachineFrontSpinningVO;
import com.whmskj.xjlhsc.panel.pojo.vo.FrontSpinningVO;
import com.whmskj.xjlhsc.panel.pojo.vo.ProductionStatus;
import com.whmskj.xjlhsc.panel.pojo.vo.TemperatureAndHumidity;
import com.whmskj.xjlhsc.panel.service.IFrontSpinningService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

/**
 * @author jiaruchun
 * @date 2025-09-10 15:15
 */
@Service
public class FrontSpinningServiceImpl implements IFrontSpinningService {
    @Autowired
    private FrontSpinningMapper frontSpinningMapper;

    @Override
    public FrontSpinningVO getFrontSpinning() {
        FrontSpinningVO frontSpinningVO = new FrontSpinningVO();
        //当前梳棉机
        List<CardingMachineFrontSpinningVO> shuMian = frontSpinningMapper.getCardingMachineFrontSpinningVO("梳棉");
        for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : shuMian) {
            //保留两位小数
            cardingMachineFrontSpinningVO.setProductionKm(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKm())));
            cardingMachineFrontSpinningVO.setProductionKg(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKg())));
        }
        //当前并条机
            //头并
            List<CardingMachineFrontSpinningVO> touBing = frontSpinningMapper.getCardingMachineFrontSpinningVO("头并");
            for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : touBing) {
                cardingMachineFrontSpinningVO.setMachineNo("头并"+cardingMachineFrontSpinningVO.getMachineNo());
            }
            //末并
            List<CardingMachineFrontSpinningVO> moBing = frontSpinningMapper.getCardingMachineFrontSpinningVO("末并");
            for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : moBing) {
                cardingMachineFrontSpinningVO.setMachineNo("末并"+cardingMachineFrontSpinningVO.getMachineNo());
            }
            List<CardingMachineFrontSpinningVO> cardingMachineFrontSpinningVOS = new ArrayList<CardingMachineFrontSpinningVO>();
                cardingMachineFrontSpinningVOS.addAll(touBing);
                cardingMachineFrontSpinningVOS.addAll(moBing);
        for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : cardingMachineFrontSpinningVOS) {
            //保留两位小数
            cardingMachineFrontSpinningVO.setProductionKm(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKm())));
            cardingMachineFrontSpinningVO.setProductionKg(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKg())));
        }
            //machineNo从大到小排序
            cardingMachineFrontSpinningVOS.sort((o1, o2) -> o2.getMachineNo().compareTo(o1.getMachineNo()));
            for (int i = 0; i < cardingMachineFrontSpinningVOS.size(); i++) {
                cardingMachineFrontSpinningVOS.get(i).setSort(i + 1);
            }
        //当前粗纱机
        List<CardingMachineFrontSpinningVO> cuSha = frontSpinningMapper.getCardingMachineFrontSpinningVO("粗纱");
            for (int i = 0; i < cuSha.size(); i++) {
                cuSha.get(i).setSort(i + 1);
            }
        for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : cuSha) {
            //保留两位小数
            cardingMachineFrontSpinningVO.setProductionKm(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKm())));
            cardingMachineFrontSpinningVO.setProductionKg(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKg())));
        }
        LocalDateTime now = LocalDateTime.now();
        LocalDate startDate = null;
        //当前时间大于20号21：30，startDate取本月21号,小于startDate取上月21号
        if(now.getDayOfMonth() > 20 && now.getHour() >21){
            if (now.getMinute() > 30) {
                //当前时间大于20号21：30，startDate取本月21号
                startDate = LocalDate.now().withDayOfMonth(21);
            }
        }else{
            //当前时间小于20号21：30，startDate取上月21号
            startDate = LocalDate.now().minusMonths(1).withDayOfMonth(21);
        }
        //梳棉机月产量
        List<CardingMachineFrontSpinningVO> shuMianMonth = frontSpinningMapper.getMonthCardingMachineFrontSpinningVO(startDate.toString(), "梳棉");
        for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : shuMianMonth) {
            //保留两位小数
            cardingMachineFrontSpinningVO.setProductionKm(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKm())));
            cardingMachineFrontSpinningVO.setProductionKg(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKg())));
        }
        //并条机月产量
            //头并
                List<CardingMachineFrontSpinningVO> touBingMonth = frontSpinningMapper.getMonthCardingMachineFrontSpinningVO(startDate.toString(), "头并");
        for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : touBingMonth) {
            cardingMachineFrontSpinningVO.setMachineNo("头并" + cardingMachineFrontSpinningVO.getMachineNo());
        }
                //条卷并
//                List<CardingMachineFrontSpinningVO> tiaoJuanMonth = frontSpinningMapper.getMonthCardingMachineFrontSpinningVO(startDate.toString(), "条卷并");
                //精梳
//                List<CardingMachineFrontSpinningVO> jingShuMonth = frontSpinningMapper.getMonthCardingMachineFrontSpinningVO(startDate.toString(), "精梳");
                //末并
                List<CardingMachineFrontSpinningVO> moBingMonth = frontSpinningMapper.getMonthCardingMachineFrontSpinningVO(startDate.toString(), "末并");
        for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : moBingMonth) {
            cardingMachineFrontSpinningVO.setMachineNo("末并" + cardingMachineFrontSpinningVO.getMachineNo());
        }
                //并条机月产量
        List<CardingMachineFrontSpinningVO> cardingMachineFrontSpinningVOSMonth = new ArrayList<CardingMachineFrontSpinningVO>();
        cardingMachineFrontSpinningVOSMonth.addAll(touBingMonth);
//        cardingMachineFrontSpinningVOSMonth.addAll(tiaoJuanMonth);
//        cardingMachineFrontSpinningVOSMonth.addAll(jingShuMonth);
        cardingMachineFrontSpinningVOSMonth.addAll(moBingMonth);
        cardingMachineFrontSpinningVOSMonth.sort((o1, o2) -> o2.getMachineNo().compareTo(o1.getMachineNo()));
        for (int i = 0; i < cardingMachineFrontSpinningVOSMonth.size(); i++) {
            cardingMachineFrontSpinningVOSMonth.get(i).setSort(i + 1);
        }
        for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : cardingMachineFrontSpinningVOSMonth) {
            //保留两位小数
            cardingMachineFrontSpinningVO.setProductionKm(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKm())));
            cardingMachineFrontSpinningVO.setProductionKg(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKg())));
        }
        //粗纱机月产量
        List<CardingMachineFrontSpinningVO> cuShaMonth = frontSpinningMapper.getMonthCardingMachineFrontSpinningVO(startDate.toString(), "粗纱");
        for (int i = 0; i < cuShaMonth.size(); i++) {
            cuShaMonth.get(i).setSort(i + 1);
        }
        for (CardingMachineFrontSpinningVO cardingMachineFrontSpinningVO : cuShaMonth) {
            //保留两位小数
            cardingMachineFrontSpinningVO.setProductionKm(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKm())));
            cardingMachineFrontSpinningVO.setProductionKg(Float.parseFloat(String.format("%.3f", cardingMachineFrontSpinningVO.getProductionKg())));
        }
        //
        for (int i = 0; i < shuMian.size(); i++) {
            shuMian.get(i).setSort(i + 1);
        }
        frontSpinningVO.setCardingMachineFrontSpinningVO(shuMian);
        frontSpinningVO.setCardingMachineFrontSpinningMonthVO(shuMianMonth);
        //
        frontSpinningVO.setAndCardingMachineFrontSpinningVO(cardingMachineFrontSpinningVOS);
        frontSpinningVO.setAndCardingMachineFrontSpinningMonthVO(cardingMachineFrontSpinningVOSMonth);
        //
        frontSpinningVO.setCuShaCardingMachineFrontSpinningVO(cuSha);
        frontSpinningVO.setCuShaCardingMachineFrontSpinningMonthVO(cuShaMonth);
        //生产状态----------------------------------------
        //粗纱
        List<ProductionStatus> productionStatusList = frontSpinningMapper.getProductionStatusList("粗纱");
        productionStatusList.removeIf(new Predicate<ProductionStatus>() {
            @Override
            public boolean test(ProductionStatus productionStatus) {
               return productionStatus.getDeviceName().equals("尾纱机");
            }
        });
        //梳棉
        List<ProductionStatus> productionStatusList1 = frontSpinningMapper.getProductionStatusList("梳棉");
        //头并
        List<ProductionStatus> productionStatusList2 = frontSpinningMapper.getProductionStatusList("头并");
        for (ProductionStatus productionStatus : productionStatusList2) {
            productionStatus.setDeviceNumber(productionStatus.getProcess() + productionStatus.getDeviceNumber());
        }
        //末并
        List<ProductionStatus> productionStatusList5 = frontSpinningMapper.getProductionStatusList("末并");
        for (ProductionStatus productionStatus : productionStatusList5) {
            productionStatus.setDeviceNumber(productionStatus.getProcess() + productionStatus.getDeviceNumber());
        }
        ArrayList<ProductionStatus> productionStatuses = new ArrayList<>(productionStatusList);
        productionStatuses.addAll(productionStatusList1);
        productionStatuses.addAll(productionStatusList2);
        productionStatuses.addAll(productionStatusList5);
        for (ProductionStatus productionStatus : productionStatuses) {
            //保留两位小数
            productionStatus.setProductionDay(Float.parseFloat(String.format("%.3f", productionStatus.getProductionDay())));
            productionStatus.setProductionShift(Float.parseFloat(String.format("%.3f", productionStatus.getProductionShift())));
        }
        frontSpinningVO.setProductionStatusList(productionStatuses);
        //温湿度统计------------------------------------------
        List<TemperatureAndHumidity> temperatureAndHumidityStatistics = frontSpinningMapper.getTemperatureAndHumidityStatistics();
        for (TemperatureAndHumidity temperatureAndHumidityStatistic : temperatureAndHumidityStatistics) {
            //保留两位小数
            temperatureAndHumidityStatistic.setTemperature(Float.parseFloat(String.format("%.2f", temperatureAndHumidityStatistic.getTemperature())));
            temperatureAndHumidityStatistic.setHumidity(Float.parseFloat(String.format("%.2f", temperatureAndHumidityStatistic.getHumidity())));
        }
        frontSpinningVO.setTemperatureAndHumidityStatistics(temperatureAndHumidityStatistics);
        return frontSpinningVO;
    }
}
